﻿//　　　　　　　┏┓　　　┏┓+ +
//　　　　　　┏┛┻━━━┛┻┓ + +
//　　　　　　┃　　　　　　　┃ 　
//　　　　　　┃　　　━　　　┃ ++ + + +
//　　　　　 ████━████ ┃+
//　　　　　　┃　　　　　　　┃ +
//　　　　　　┃　　　┻　　　┃
//　　　　　　┃　　　　　　　┃ + +
//　　　　　　┗━┓　　　┏━┛
//　　　　　　　　┃　　　┃　　　　　　　　　　　
//　　　　　　　　┃　　　┃ + + + +
//　　　　　　　　┃　　　┃　　　　
//　　　　　　　　┃　　　┃ + 
//　　　　　　　　┃　　　┃
//　　　　　　　　┃　　　┃　　+　　　　　　　　　
//　　　　　　　　┃　 　　┗━━━┓ + +
//　　　　　　　　┃ 　　　　　　　┣┓
//　　　　　　　　┃ 　　　　　　　┏┛
//　　　　　　　　┗┓┓┏━┳┓┏┛ + + + +
//　　　　　　　　　┃┫┫　┃┫┫
//　　　　　　　　　┗┻┛　┗┻┛+ + + +
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data;
using OrBitDataAcquisition.Dialog;
using OrBitDataModule;
using OrBitDataModule.Common;

namespace OrBitDataAcquisition
{
    internal static class Program
    {
        //[System.Runtime.InteropServices.DllImport("user32.dll")]
        //private static extern bool SetProcessDPIAware();

        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            try
            {
                //if (Environment.OSVersion.Version.Major >= 6)
                //    SetProcessDPIAware();

                Mutex mutex = new Mutex(true, Application.ProductName, out bool flag);
                if (flag)
                {
                    //设置应用程序处理异常方式：ThreadException处理
                    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                    //处理UI线程异常
                    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                    //处理非UI线程异常
                    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new LoginFrm());
                    mutex.ReleaseMutex();
                }
                else
                {
                    MessageBox.Show("程序已经运行!", "数据采集程序", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    Application.Exit();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
                Application.Exit();
            }

        }
        //static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        //{

        //    string assemblyPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), new AssemblyName(args.Name).Name + ".dll");
        //    if (File.Exists(assemblyPath))
        //    {
        //        return Assembly.LoadFrom(assemblyPath);
        //    }
        //    return null;
        //}
        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            string str = Logger.GetExceptionMsg(e.Exception, e.ToString());
            MessageBox.Show(str, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            string str = Logger.GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
            MessageBox.Show(str, "异常", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}
